'''
作者: 杨萍
介绍:实验管理-实验室预约审批模块获取详情接口测试
'''
import unittest
from parameterized.parameterized import parameterized
from jsonpath import jsonpath
from utils.reader import Reader
from utils.session import Session


class GetDetail(unittest.TestCase):
    """
    作者: 杨萍
    介绍:获取详情接口测试类
    """
    session = None
    header = None
    @classmethod
    def setUpClass(cls) -> None:
        """
        测试类级别的脚手架方法，在测试类开始时执行，运行在此类测试方法调用之前
        """
        cls.session = Session.get_session()
        cls.header = Session.get_header()

    @classmethod
    def tearDownClass(cls) -> None:
        """
        测试类级别的脚手架方法，在测试类开始时执行，运行在此类测试方法调用之前
        """
        cls.session.close()

    @parameterized.expand(Reader.read_excel('laboratory.xlsx', min_row=50, max_row=55, min_col=8, max_col=10))
    def test_get_detail(self, url, id, expected_status):
        """
        实验室预约审批模块 重置接口
        """

        resp = self.session.get(url, headers=self.header)

        # 根据响应提取出实际数据
        body = resp.json()

        # 实际响应中的resMsg,id
        real_message = jsonpath(body, "$..message")
        real_id = jsonpath(body, "$..id")

        # 如果响应中的message值不为空，断言状态码与预期值一致；响应中的id值不为空，断言参数中的id与响应中的的id值一致
        if real_message != False:
            self.assertEqual(expected_status, resp.status_code)
        if real_id != False:
            self.assertEqual(id, real_id[0])

